//
//  MainViewController.swift
//  Swift_Demo01
//
//  Created by zy on 16/8/8.
//  Copyright © 2016年 zy. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //设置当前控制器对应tabbar的颜色
        tabBar.tintColor = UIColor.orangeColor()
        
        //1.获取json文件的路径
        let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)
        //2.通过文件路径创建NSData
        if let jsonPath = path {
            let jsonData = NSData(contentsOfFile: jsonPath)
            
            do{
                //有可能发生异常的代码放到这里
                //3.序列化json数据  --> Array
                //try :发生异常会跳到catch中继续执行
                //try!:发生异常程序直接崩溃
                let dictArr = try NSJSONSerialization.JSONObjectWithData(jsonData!, options: NSJSONReadingOptions.MutableContainers)
                //4.遍历数组，动态创建控制器和设置数据
                //Swift中，如果要遍历一个数组，必须明确数组的类型
                for dict in dictArr as! [[String:String]] {
                    
                    addChildViewController(dict["vcName"]!, title: dict["title"]!, imageName: dict["imageName"]!)
                }
            }catch{
                
                //发生异常之后会执行的代码
                print(error)
                
                //从本地加载控制器
                addChildViewController("HomeTableViewController", title: "首页", imageName: "tabbar_home")
                addChildViewController("MessageTableViewController", title: "消息", imageName: "tabbar_message_center")
                addChildViewController("DiscoverTableViewController", title: "广场", imageName: "tabbar_discover")
                addChildViewController("ProfileTableViewController", title: "我", imageName: "tabbar_profile")
            }
        }
    }
    
    /**
     初始化子控制器
     */
//    private func addChildViewController(childController: UIViewController,title:String,imageName:String) {
    
    private func addChildViewController(childControllerName: String,title:String,imageName:String) {
        
        //获取控制器名称（为了将控制器转用字符串加载）
//        print(childController)
//        <Swift_Demo01.HomeTableViewController: 0x7fc3cbd9a0d0>
    
        //1.动态获取命名空间
        let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
        
        //2.将字符串转化为类
        //默认情况下命名空间就是项目的名称，但是命名空间名称是可以修改的
        let cls:AnyClass? = NSClassFromString(ns + "." + childControllerName)
        
        //3.将AnyClass转换为指定的类型
        let vcCls = cls as! UIViewController.Type

        let vc = vcCls.init()
        
        vc.tabBarItem.image = UIImage(named: imageName)
        vc.tabBarItem.selectedImage = UIImage(named: imageName+"_highlighted")
        /*
         以下两种方式效果相同
         home.tabBarItem.title = "首页"
         home.navigationItem.title = "首页"
         */
        vc.title = title
        
        let nav = UINavigationController()
        
        nav.addChildViewController(vc)
        //将导航控制器添加到当前控制器上
        addChildViewController(nav)
    }
}
